package com.jt.common.util;

import java.text.DecimalFormat;
import java.math.BigDecimal;

public class DecimalUtil {
	private static DecimalFormat df = new DecimalFormat("0.00");
	private static DecimalFormat df2 = null;

	public static String format(Double amount) {
		if(amount==null){
			return "0.00";
		}
		return df.format(amount);
	}
	
	public static String format(Double amount, String format) {
		df2 = new DecimalFormat(format);
		if(amount==null){
			return format;
		}
		return df2.format(amount);
	}
	
	/**
	 * 米转换成千米
	 * @param m
	 * @return
	 */
	public static double mToKm(Integer m){
		double dis = 0;
		dis = Math.round(m/100d)/10d;
		return dis;
	}
	
	 /** 
     * 提供精确的乘法运算。 
     *  
     * @param value1 
     *            被乘数 
     * @param value2 
     *            乘数 
     * @return 两个参数的积 
     */  
    public static Double mul(Number value1, Number value2) {  
        BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue()));  
        BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue()));  
        return b1.multiply(b2).doubleValue();  
    } 
    /** 
     * 提供精确的除法运算。 保留两位小数，四舍五入
     *  
     * @param value1 
     *            被除数 
     * @param value2 
     *            除数 
     * @return 两个参数相除
     */
    public static Double div(Number value1, Number value2){
    	BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue()));  
        BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue()));  
        return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP).doubleValue();  
    }
    /** 
     * 提供精确的加法运算。 
     *  
     * @param value1 
     *            被加数 
     * @param value2 
     *            加数 
     * @return 两个参数的和
     */  
    public static Double add(Number value1, Number value2) {  
    	if(value1==null){
			value1 = 0;
    	}
    	if(value2==null){
    		value2 = 0;
    	}
        BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue()));  
        BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue()));  
        return b1.add(b2).doubleValue();  
    }
    
    /**
     * 减法
     * @param value1
     * @param value2
     * @return
     */
    public static Double subtract(Number value1, Number value2) {  
    	if(value1==null){
			value1 = 0;
    	}
    	if(value2==null){
    		value2 = 0;
    	}
        BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue()));  
        BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue()));  
        return b1.subtract(b2).doubleValue();  
    }
    
    /**
     * 判断是否=0
     * isZero
     * @param param
     * @return
     */
    public static boolean isZero(BigDecimal param){
    	if(param.compareTo(BigDecimal.ZERO)==0){
    		return true;
    	}
    	return false;
    }
    
	/**
	 * 比较param1 > param2 compare
	 * 
	 * @param param1
	 * @param param2
	 * @return 1:左大于右;-1:左小于右;0:相等
	 */
	public static int compare(BigDecimal param1, BigDecimal param2) {
		int res = param1.compareTo(param2);
		return res;
	}
	
	/**
	 * 多组数据相加
	 * @param objs
	 */
	public static Double continuousAdd(Double... objs) {
		double num = 0;
		if(objs != null && objs.length > 0) {
			for(int i = 0; i < objs.length; ++i) {
				num = add(num,objs[i]);
			}
		}
		return num;
	}
}
